/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package SGBD2;

import java.util.ArrayList;
import java.util.List;
import SGBD2.Atributo;

/**
 *
 * @author user
 */
public class GestioPaginasTarea1 {
    static String nombreArchivo = "D:/SGBD/relacion.dat";
    static Relacion rel;
    
    public static int agregartupla(List<Pagina> paginas, List<IdentificadorPagina> pid,int idarchivo,Tupla t1){
        if (paginas.get(idarchivo).hayEspacio(t1)){
                    paginas.get(idarchivo).adicionarTupla(t1);
                }else{
                    idarchivo=paginas.size();
                    pid.add(new IdentificadorPagina(nombreArchivo, idarchivo));
                    paginas.add(new Pagina(rel, pid.get(idarchivo)));
                    t1.getIdTupla().setNumero(idarchivo);
                    paginas.get(idarchivo).adicionarTupla(t1);
                }
        return idarchivo;
    }
    public static void main(String[] args) {
        try {
            

            List<Atributo> attrs = new ArrayList<Atributo>();
            attrs.add(new Atributo("character", Character.class));
            attrs.add(new Atributo("byte", Byte.class));
            attrs.add(new Atributo("short", Short.class));
            attrs.add(new Atributo("integer", Integer.class));
            attrs.add(new Atributo("long", Long.class));
            attrs.add(new Atributo("float", Float.class));
            attrs.add(new Atributo("double", Double.class));
            attrs.add(new Atributo("string", String.class));
            // Esquema de relación
            rel = new Relacion(attrs);
            // Crear una lista de valores de tupla
            List<Comparable> v = new ArrayList<Comparable>();
            v.add(new Character('a'));
            v.add(new Byte((byte) 15));
            v.add(new Short((short) 320));
            v.add(new Integer(1024));
            v.add(new Long(189239));
            v.add(new Float(15.2));
            v.add(new Double(30.1));
            v.add(new String("mas mas"));
            // Crear una página
            // Crear un id de página
            List<IdentificadorPagina> pid = new ArrayList<IdentificadorPagina>(); 
            pid.add(new IdentificadorPagina(nombreArchivo, 0));
            pid.add(new IdentificadorPagina(nombreArchivo, 1));
            
            List<Pagina> paginas=new ArrayList<Pagina>();
            paginas.add(new Pagina(rel, pid.get(0)));
            paginas.add(new Pagina(rel, pid.get(1)));
            int idarchivo=0;
            
             for (int i = 0; i < 90; i++) {
            // crear tupla
                Tupla t1 = new Tupla(new IdentificadorTupla(nombreArchivo, idarchivo), v);
                // añadir tuplas a la página
                // CON IDARCHIVO SE PONE LA PAGINA EN LA CUAL SE QUIERE GUARDAR
                idarchivo=agregartupla(paginas,pid,idarchivo,t1);
                
            }
            // mostrar la pagina p1
            System.out.println(paginas.get(0));
            System.out.println(paginas.get(idarchivo));
            System.out.println(paginas.get(0).espacioLibre);
            idarchivo=1;
            //for (int i = 0; i < 50; i++) {
                Tupla t2 = new Tupla(new IdentificadorTupla(nombreArchivo, idarchivo), v);
                idarchivo=agregartupla(paginas,pid,idarchivo,t2);
            //}
            System.out.println(paginas.get(1));
            // Almacenar en disco las páginas
            java.io.RandomAccessFile raf = 
                    new java.io.RandomAccessFile(nombreArchivo, "rw");
            
            for(int i=0;i<paginas.size();i++){
            GestorIOPagina.escribirPagina(raf, paginas.get(i));
            
            }
            raf.close();

            // Leer la página 

            raf = new java.io.RandomAccessFile(nombreArchivo, "r");
            System.out.println("leyendo pagina...");
            for(int i=0;i<paginas.size();i++){
            Pagina pagina1 = 
                    GestorIOPagina.leerPagina(rel, 
                    new IdentificadorPagina(nombreArchivo, i), raf);
            
            System.out.println(pagina1);
            }
            raf.close();
        } catch (Exception e) {
            System.err.println("Exception: " + e.getMessage());
            e.printStackTrace(System.err);
        }
    }
}